/**
 * 人物 显示对象
 */
class GamePersonUI
    extends egret.Sprite {

    /**
     * 编译顺序 标识
     */
    public static referenceFlag: string = GamePersonVO.referenceFlag;

    /**
     * 相关属性
     */
    private selfPersonVO: GamePersonVO = null; // VO 数据 对象
    public thisName: string = ""; // 精灵 名称
    private selfPhysicsObject: PhysicsObject = null; // 物理对象

    /**
     * 相关 动画 属性
     */
    private animationSpriteList: Array<AnimationSprite> = [];
    private currentAnimationFlag: number = -1; // 当前 播放 动画 标识数字


    /**
     * 构造函数
     */
    public constructor() {
        super();
    }

    /**
     * 初始化 函数
     * @param setData
     */
    public init(setData: GamePersonVO): void {

        let getVO: GamePersonVO = setData;
        this.selfPersonVO = getVO;

        this.thisName = this.selfPersonVO.thisName; // 初始化 名称

        this.initPhysicsObject(); // 初始化 物理对象
        this.updateMap(); // 更新 映射（同步 物理对象 数据）
        this.initAnimationList(); // 初始化 动画 集合
    }

    /**
     * 根据 物理对象，同步 更新 显示对象 数据
     */
    public updateMap(): void {

        this.width = this.selfPhysicsObject.width;
        this.height = this.selfPhysicsObject.height;

        this.x = this.selfPhysicsObject.x;
        this.y = this.selfPhysicsObject.y;
    }

    /**
     * 根据 VO 数据对象，相应 映射 物理对象
     */
    public initPhysicsObject(): void {

        // 1.0 初始化 物理对象
        let getPhysicsType: string = this.selfPersonVO.selfPhysicsType;
        let getX: number = this.selfPersonVO.selfX;
        let getY: number = this.selfPersonVO.selfY;
        let getWidth: number = this.selfPersonVO.selfWidth;
        let getHeight: number = this.selfPersonVO.selfHeight;
        let getPoint: egret.Point = GameHelper.getInstance.createMapPoint(getX, getY);

        let getPhysicsObject: PhysicsObject = new PhysicsObject();
        getPhysicsObject.init(getPhysicsType, getPoint, getWidth, getHeight);

        this.selfPhysicsObject = getPhysicsObject;
    }

    /**
     * 初始化 动画 集合
     */
    private initAnimationList(): void {

        let animationKeyList: Array<string> = this.selfPersonVO.movieClipKeyList;

        /**
         * 开始 填充 动画 集合
         */
        for (let i = 0; i < animationKeyList.length; i++) {

            let animationType: string = animationKeyList[i]; // 动画 类型

            let getAnimationSprite: AnimationSprite = new AnimationSprite(); // 2.0 待机 动画
            getAnimationSprite.init(animationType);
            this.animationSpriteList.push(getAnimationSprite);
        }

        /**
         *  初始化 动画精灵，宽高、锚点、位置
         */
        for (let i = 0; i < this.animationSpriteList.length; i++) {

            this.animationSpriteList[i].height = this.height; // 初始化 宽高
            this.animationSpriteList[i].width = this.width;

            this.addChild(this.animationSpriteList[i]); // 添加到 显示列表

            this.animationSpriteList[i].anchorOffsetX = this.animationSpriteList[i].width / 2; // 重置 锚点
            this.animationSpriteList[i].anchorOffsetY = this.animationSpriteList[i].height / 2;

            this.animationSpriteList[i].x = this.animationSpriteList[i].width / 2; // 由于 锚点 重置，位置 相应 重置
            this.animationSpriteList[i].y = this.animationSpriteList[i].height / 2;

            this.animationSpriteList[i].setVisible(false); // 默认 不显示
        }

    }

}